/* 
  封装axios实例的拦截器（请求、响应）
*/
import axios from "axios";
import toast from "../components/Toast/index";

// 1.创建axios实例
const instance = axios.create({
  timeout: 15000, // 超时时间
  baseURL: "http://192.168.113.249:8081", // ip + 端口，公用的前缀路径
});

// 2.重写实例请求拦截器
instance.interceptors.request.use(
  config => {
    const token = localStorage.getItem("token");
    if (token) {
      // 统一设置请求头，封装的方法内部就无需再次设置了
      config.headers["x-auth-token"] = token;
    }
    // 同理，可以通过config.params设置传递的参数(放在url上的，不过也是统一全部都设置，一般不用)
    return config;
  },
  err => {
    return Promise.reject(err);
  }
);

// 3.重写实例响应后拦截器(后置导航守卫)
instance.interceptors.response.use(
  result => {
    // 如果没有该商品，则弹出提示框
    if (result.data.code !== 0) {
      toast({
        message: result.data.message || "请求失败",
        type: "success",
        duration: "2000",
      });
      return result.data;
    }
    return result.data;
  },
  err => {
    return Promise.reject(err);
  }
);

export default instance;
